#!/usr/bin/env node

// 简单的 i18n 翻译文件生成器
import fs from 'fs';
import path from 'path';

console.log('🚀 开始扫描项目中的中文文本并生成翻译文件...\n');

// 创建 locales 目录
const localesDir = path.join(__dirname, 'locales');
if (!fs.existsSync(localesDir)) {
    fs.mkdirSync(localesDir, { recursive: true });
    console.log('📁 创建 locales 目录');
}

// 扫描目录配置
const scanDirs = [
    'frontend/src/pages',
    'frontend/src/scripts', 
    'frontend/src/components',
    'user-client/views',
    'user-client/public/js',
    'backend/src'
];

// 支持的语言
const languages = ['zh-CN', 'en-US', 'ja-JP', 'ko-KR'];

// 存储翻译内容
const translations = {};

// 递归扫描目录
function scanDirectory(dirPath) {
    const fullPath = path.join(__dirname, dirPath);
    if (!fs.existsSync(fullPath)) {
        console.log(`⚠️  目录不存在: ${dirPath}`);
        return;
    }

    console.log(`🔍 扫描目录: ${dirPath}`);
    
    const files = fs.readdirSync(fullPath);
    files.forEach(file => {
        const filePath = path.join(fullPath, file);
        const stat = fs.statSync(filePath);
        
        if (stat.isDirectory()) {
            // 跳过不需要的目录
            if (['node_modules', 'dist', 'build', '.git'].includes(file)) {
                return;
            }
            scanDirectory(path.join(dirPath, file));
        } else {
            // 检查文件扩展名
            const ext = path.extname(file).toLowerCase();
            if (['.js', '.ts', '.vue', '.jsx', '.tsx', '.html'].includes(ext)) {
                scanFile(filePath, dirPath);
            }
        }
    });
}

// 扫描单个文件
function scanFile(filePath, baseDir) {
    try {
        const content = fs.readFileSync(filePath, 'utf8');
        const relativePath = path.relative(__dirname, filePath);
        
        // 匹配中文文本的正则表达式
        const chineseRegex = /[一-龥]{2,}/g;
        const matches = content.match(chineseRegex) || [];
        
        // 排除不需要翻译的文本
        const excludedStrings = [
            '宋体', '黑体', '楷体', '仿宋', '微软雅黑', '华文', '方正', '苹方', '思源',
            'YYYY年MM月DD日', 'ubike', 'admin', 'API', 'URL', 'HTML', 'CSS', 'JS'
        ];
        
        const uniqueMatches = [...new Set(matches)].filter(text => 
            !excludedStrings.some(excluded => text.includes(excluded))
        );
        
        if (uniqueMatches.length > 0) {
            console.log(`📄 ${relativePath}: 发现 ${uniqueMatches.length} 个中文文本`);
            
            uniqueMatches.forEach(text => {
                // 生成简单的键名
                const key = text.replace(/[^\w\u4e00-\u9fa5]/g, '_').substring(0, 30);
                if (!translations[key]) {
                    translations[key] = {
                        'zh-CN': text,
                        'en-US': text, // 暂时保留原文
                        'ja-JP': text,
                        'ko-KR': text
                    };
                }
            });
        }
    } catch (error) {
        console.error(`❌ 扫描文件失败: ${filePath}`, error.message);
    }
}

// 生成语言文件
function generateLocaleFiles() {
    languages.forEach(lang => {
        const localeData = {};
        
        Object.keys(translations).forEach(key => {
            localeData[key] = translations[key][lang] || translations[key]['zh-CN'];
        });

        const filePath = path.join(localesDir, `${lang}.json`);
        fs.writeFileSync(filePath, JSON.stringify(localeData, null, 2), 'utf8');
        console.log(`✅ 生成语言文件: ${filePath} (${Object.keys(localeData).length} 个条目)`);
    });
}

// 主函数
function main() {
    console.log('📊 配置信息:');
    console.log('   扫描目录:', scanDirs);
    console.log('   支持语言:', languages);
    console.log('   输出目录: locales/\n');
    
    // 扫描所有目录
    scanDirs.forEach(dir => {
        scanDirectory(dir);
    });
    
    console.log(`\n📊 扫描完成！`);
    console.log(`   发现中文文本: ${Object.keys(translations).length} 个`);
    
    if (Object.keys(translations).length > 0) {
        // 生成语言文件
        generateLocaleFiles();
        
        console.log('\n🎉 多语言文件生成完成！');
        console.log('📁 文件位置: locales/');
        
        // 显示示例翻译
        console.log('\n📝 示例翻译:');
        const sampleKeys = Object.keys(translations).slice(0, 5);
        sampleKeys.forEach(key => {
            console.log(`   ${key}: ${translations[key]['zh-CN']}`);
        });
    } else {
        console.log('\n⚠️  未发现需要翻译的中文文本');
    }
}

// 运行主函数
main();